package cn.sh.tools.service.component.image;

import cn.hutool.core.io.FileUtil;
import cn.sh.tools.util.ImageUtils;
import cn.sh.tools.util.file.FileUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description image
 * @Classname ImageComponet
 * @Date 2023/5/25
 * @Author sh
 **/
@Component
@Slf4j
public class ImageComponent {

    /**
     * @param imagePath   待合成图片的路径
     * @param imageSuffix 待合成图片的后缀名
     * @param gifName     GIF动图名称
     * @return 返回转换成功消息提示
     * 将多张图片合成GIF动图
     */
    public String imagesToGif(String imagePath, String imageSuffix, String gifName) {
        imagePath = FileUtils.normalized(imagePath);
        if (!imageSuffix.startsWith(".")) {
            imageSuffix = "." + imageSuffix;
        }
        String finalNewImageSuffix = imageSuffix;

        List<BufferedImage> imageList = new ArrayList<>();
        FileUtil.loopFiles(imagePath).stream()
                .filter(file -> file.getName().endsWith(finalNewImageSuffix))
                .forEach(file -> {
                    try {
                        imageList.add(ImageIO.read(file));
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                });

        try {
            // 将多张图合成一张gif动图
            ImageUtils.imagesToGif(imageList, imagePath, gifName, null);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return "图片合成GIF动图成功，请前往【".concat(imagePath).concat("】查看");
    }

}
